<?php defined('BASEPATH') OR exit('No direct script access allowed');

class Profile extends CI_Controller {

	/* Layout utilizado pela pagina. */
	public $layout = 'default_admin';
	
	/* Titulo da Pagina. */
	public $title = CLIENTE;
	
	/* Menu do sistema*/
	public $menuTopo = '';
	
	/* Menu do sistema*/
	public $menuLateral = '';
	
	/* Caminho do pão do sistema */
	public $caminhoPao = '';
	
	/* css utilizado pela pagina. */
	public $css = array('admin/bootstrap', 'plugins/toastr/toastr.min', 'admin/animate', 'admin/style', 'plugins/waitMe/waitMe' );
	
	/* Js utilizado pela pagina. */
	public $js = array('plugins/jquery/jquery-2.1.4', 'admin/bootstrap', 'plugins/metisMenu/jquery.metisMenu', 'plugins/slimscroll/jquery.slimscroll.min', 'admin/principal', 'plugins/pace/pace.min', 'plugins/toastr/toastr.min', 'plugins/jquery-cookie/jquery.cookie', 'plugins/waitMe/waitMe');
	
	public function __construct(){
		parent::__construct();
		//Verifica se o usuário está logado
		usuarioLogado($this->session->userdata('logged'));
		
		$this->load->model('Usuario_Model', 'usuario');
		$this->load->model('Pessoa_Model', 'pessoa');
		
		//Montando menu dinâmico
		$this->load->library('Menu_Lib', 'menu_lib');
		$this->menuTopo = $this->menu_lib->menuTopo();
		$this->menuLateral = $this->menu_lib->menuLateral(null);
		$this->caminhoPao = $this->menu_lib->caminhoPao(null, "Editar Profile", null);
		
		//Carregando biblioteca de imagem
		$this->load->library('Imagem_Lib', 'imagem_lib');
	}
	
	public function index()	{					
		try {
				array_push($this->js, 'plugins/datapicker/bootstrap-datepicker', 'plugins/jquery-mask/jquery.mask.min', 'plugins/formValidation/formValidation', 'plugins/framework/bootstrap', 'plugins/cropper/cropper', 'admin/profile');
				array_push($this->css, 'plugins/formValidation/formValidation', 'plugins/datapicker/datepicker3', 'plugins/cropper/cropper');
				
				$idUsuario = decrypt(trim($this->session->userdata('idUsuario')));
				$idPessoa = decrypt(trim($this->session->userdata('idPessoa')));
				
				$data = null;
				$data["usuario"] = $this->usuario->obter($idUsuario);
				
				if (empty($idPessoa)){
					$data["pessoa"] = $this->pessoa->obterPessoaAtivaPorUsuario($idUsuario);
				}else{
					$data["pessoa"] = $this->pessoa->obter($idPessoa);
				}
				
				$data["foto"] = decrypt(trim($this->session->userdata('foto')));
				
				$this->load->view('admin/profile', $data);
			
		}catch (Exception $e){
			echo ($e->getMessage());
		}
		
	}
	
	public function uploadAvatar(){
	
		try {
				
			$this->layout = "";
			
			$retornoJson = false;
			$tipoMensagem = "";
			$msg = "";
			
			$json = null;
			
			$arquivoRemovido = true;
				
			//Parâmetros para passar para o método
			$caminhoDestino = "uploads/profile/";
			$idUsuario = trim(decrypt(trim($this->session->userdata('idUsuario'))));
			$idPessoa = trim(decrypt(trim($this->session->userdata('idPessoa'))));
			
			//Verificar se tem idPessoa
			if (!empty($idPessoa)){	
							
				$dadosPessoa = $this->pessoa->obter($idPessoa);
					
				//Se já tiver uma foto, remover a mesma do servidor
				if (!empty($dadosPessoa->foto)){
					//Tenta remover o arquivo antigo
					if (!$this->imagem_lib->removerArquivo($dadosPessoa->foto)){
						$arquivoRemovido = false;
					}
				}
				
			}
			
			if ($arquivoRemovido){
				
				$retorno = $this->imagem_lib->upload($caminhoDestino, $idUsuario, false);
				
				if (!empty($retorno) && is_array($retorno) ){
				
					//Iniciando transação
					$this->db->trans_begin();
				
					if (empty($idPessoa)){
				
						$pessoa = null;
						$pessoa['idUsuario'] = $idUsuario;
						$pessoa['foto'] = $caminhoDestino.$retorno["file_name"];
						$pessoa['idUsuarioCadastro'] = $idUsuario;
						$pessoa['dtCadastro'] = date("Y-m-d H:i:s");
						$pessoa['idUsuarioUltimaAlteracao'] = $idUsuario;
						$pessoa['dtUltimaAlteracao'] = date("Y-m-d H:i:s");
						$pessoa['dtVigenciaIni'] = date("Y-m-d H:i:s");
						$pessoa['dtVigenciaFim'] = null;
				
						$idPessoa = $this->pessoa->inserir($pessoa);
				
						if (!empty($idPessoa) && $idPessoa != false){
							$this->session->set_userdata('foto', encrypt(base_url().trim($pessoa['foto'])));
							$retornoJson = true;
						}else{
							$retornoJson = false;
						}
				
					}else{
							
						$pessoa['foto'] = $caminhoDestino.$retorno["file_name"];
						$pessoa['idUsuarioUltimaAlteracao'] = $idUsuario;
						$pessoa['dtUltimaAlteracao'] = date("Y-m-d H:i:s");
			
						if ($this->pessoa->alterar($pessoa, $idPessoa)){
							$this->session->set_userdata('foto', encrypt(base_url().trim($pessoa['foto'])));
							$retornoJson = true;
						}else{
							$retornoJson = false;
						}
					}
				
					if ($retornoJson){
						$this->db->trans_commit();
						$json['src'] = base_url().trim($pessoa['foto']);
						$tipoMensagem = "alert-success";
						$msg = "Alterada com sucesso!";
					}else{
						throw new Exception('Ocorreu um erro. Tente novamente mais tarde!');
					}
				
				}else{
					throw new Exception('Erro ao realizar o upload da imagem!');
				}
				
			}else{
				throw new Exception('Erro ao remover a imagem antiga!');
			}
			
			$json['sucesso'] = $retornoJson;
			$json['tipoMensagem'] = $tipoMensagem;
			$json['msg'] = $msg;
				
			echo json_encode($json);
				
		}catch (Exception $e){
			$this->imagem_lib->removerArquivo($caminhoDestino.$retorno["file_name"]);
			
			$this->db->trans_rollback();
				
			$json['sucesso'] = false;
			$json['tipoMensagem'] = "alert-danger";
			$json['mensagem'] = $e->getMessage();
				
			echo json_encode($json);
		}
	
	}
	
	public function editarProfile(){
		try {
			
			$this->layout = "";
			
			$retornoJson = false;
			$json = null;
			
			//Pegando dados do form
			$nome = trim($this->input->post('nome'));
			$dataNascimento = gravaData(trim($this->input->post('dataNascimento')));
			$cpf = trim($this->input->post('cpf'));
			$email = trim($this->input->post('email'));
			$telefone = trim($this->input->post('telefone'));
			$celular = trim($this->input->post('celular'));
			$login= trim($this->input->post('login'));
			
			$idUsuario = decrypt(trim($this->session->userdata('idUsuario')));
			$idPessoa = decrypt(trim($this->session->userdata('idPessoa')));
			
			//Iniciando transação
			$this->db->trans_begin();
			
			$usuario = null;
			$usuario['login'] = $login;
			$usuario['email'] = $email;
			
			//Alterando registro do usuário
			if ($this->usuario->alterar($usuario, $idUsuario)){
				
				if (empty($idPessoa)){
						
					$pessoa = null;
					$pessoa['idUsuario'] = $idUsuario;
					$pessoa['nome'] = $nome;
					$pessoa['dtNascimento'] = $dataNascimento;
					$pessoa['cpf'] = $cpf;
					$pessoa['telefone'] = $telefone;
					$pessoa['celular'] = $celular;
					
					$pessoa['idUsuarioCadastro'] = $idUsuario;
					$pessoa['dtCadastro'] = date("Y-m-d H:i:s");
					$pessoa['idUsuarioUltimaAlteracao'] = $idUsuario;
					$pessoa['dtUltimaAlteracao'] = date("Y-m-d H:i:s");
					$pessoa['dtVigenciaIni'] = date("Y-m-d H:i:s");
					$pessoa['dtVigenciaFim'] = null;
					
					$idPessoa = $this->pessoa->inserir($pessoa);
					
					if (!empty($idPessoa) && $idPessoa != false){
						$this->session->set_userdata('idPessoa', encrypt(trim($idPessoa)));
						$this->session->set_userdata('nome', encrypt(trim($nome)));
						$retornoJson = true;
					}else{
						$retornoJson = false;
					}
				
				}else{
					
					$pessoa['nome'] = $nome;
					$pessoa['dtNascimento'] = $dataNascimento;
					$pessoa['cpf'] = $cpf;
					$pessoa['telefone'] = $telefone;
					$pessoa['celular'] = $celular;
					
					$pessoa['idUsuarioUltimaAlteracao'] = $idUsuario;
					$pessoa['dtUltimaAlteracao'] = date("Y-m-d H:i:s");
					
					if($this->pessoa->alterar($pessoa, $idPessoa)){
						$this->session->set_userdata('nome', encrypt(trim($nome)));
						$retornoJson = true;
					}else{
						$retornoJson = false;
					}
				}
				
			}
			
			if ($retornoJson){
				$this->db->trans_commit();
			}else{
				$this->db->trans_rollback();
			}
			
			echo $retornoJson;
			
		} catch (Exception $e){
			$this->db->trans_rollback();
				
			$json['sucesso'] = false;
			$json['tipoMensagem'] = "alert-danger";
			$json['mensagem'] = $e->getMessage();
				
			echo json_encode($json);
		}
	}
	
	public function validaCpfDisponivel(){
		try{
			
			$this->layout = "";
			
			$retornoJson = false;
			
			$cpf = trim($this->input->post('cpf'));
			
			$idUsuario = decrypt(trim($this->session->userdata('idUsuario')));
			
			$pessoa = $this->pessoa->obterPessoaPorCpf($cpf, $idUsuario);
			
			if (!empty($pessoa)){
				$retornoJson = false;
			}else{
				$retornoJson = true;
			}
			
			$json = null;
			$json['valid'] = $retornoJson;
				
			echo json_encode($json);
			
		}catch (Exception $e){
			echo ($e->getMessage());
		}
	}
	
	public function validaLoginDisponivel(){
		try{
				
			$this->layout = "";
				
			$retornoJson = false;
				
			$login = trim($this->input->post('login'));
				
			$idUsuario = decrypt(trim($this->session->userdata('idUsuario')));
				
			$usuario = $this->usuario->obterUsuarioPorLogin($login, $idUsuario);
				
			if (!empty($usuario)){
				$retornoJson = false;
			}else{
				$retornoJson = true;
			}
				
			$json = null;
			$json['valid'] = $retornoJson;
	
			echo json_encode($json);
				
		}catch (Exception $e){
			echo ($e->getMessage());
		}
	}
	
	public function validaEmailDisponivel(){
		try{
	
			$this->layout = "";
	
			$retornoJson = false;
	
			$email = trim($this->input->post('email'));
	
			$idUsuario = decrypt(trim($this->session->userdata('idUsuario')));
	
			$usuario = $this->usuario->obterUsuarioPorEmail($email, $idUsuario);
	
			if (!empty($usuario)){
				$retornoJson = false;
			}else{
				$retornoJson = true;
			}
	
			$json = null;
			$json['valid'] = $retornoJson;
	
			echo json_encode($json);
	
		}catch (Exception $e){
			echo ($e->getMessage());
		}
	}
	
}